<?php
/**
 +------------------------------------------------------------------------------
 * Guide数据导入导出操作
 +------------------------------------------------------------------------------
 * @package  app
 * @author   alpha <QQ:411083658>
 * @date 2014-3-11
 * @time  下午13:38:07
 +------------------------------------------------------------------------------
 */
class Guide {
	protected $dao,$daolog,$post,$platform='SMW01';
	protected $userid=0;
	protected $debug=array();
	protected $isdebug = 0,$isecho = 0;
	/**
	 * 实例化分销商用户信息类函数
	 * */
	function __construct(){
		//$this->dao = M('UserAgent');
		//$this->daolog = M('UserAgentLog');
	}
	/**
	 * 导出Excel
	 * @param string $title 设置当前活动sheet的名称
	 * @param array $arr_column=array(设置单元格,单元格的宽度)
	 * @param array $arr_row=array(要设定的行号,设定的高度)
	 * @param array $arr_title=array(行别名)
	 * @param array $arr_data=array() 要导出的数据
	 * @param array $arr_filter=array(要过滤的字段) 
	 * */
	function guide_out_data($title,$arr_column,$arr_row,$arr_title,$arr_data,$arr_filter){
		error_reporting ( E_ALL );
		import ( "Com.Excel.PHPExcel", '', '.php' );
		//import("Com.Excel.PHPExcel.IOFactory",'','.php');
		import ( "Com.Excel.PHPExcel.Writer.Excel5", '', '.php' );
		//import("PHPExcel.Writer.Excel2007",'','.php');
		// 创建一个处理对象实例
		$objExcel = new PHPExcel ();
		
		// 创建文件格式写入对象实例, uncomment
		$objWriter = new PHPExcel_Writer_Excel5 ( $objExcel ); // 用于其他版本格式
		                                                       // or
		                                                       // $objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式
		                                                       // $objWriter->setOffice2003Compatibility(true);
		                                                       
		// 设置文档基本属性
		$objProps = $objExcel->getProperties ();
		$objProps->setCreator ( "Zeal Li" );
		$objProps->setLastModifiedBy ( "Zeal Li" );
		$objProps->setTitle ( "Office XLS Test Document" );
		$objProps->setSubject ( "Office XLS Test Document, Demo" );
		$objProps->setDescription ( "Test document, generated by PHPExcel." );
		$objProps->setKeywords ( "office excel PHPExcel" );
		$objProps->setCategory ( "Test" );
		// 设置当前的sheet索引，用于后续的内容操作。
		// 一般只有在使用多个sheet的时候才需要显示调用。
		// 缺省情况下，PHPExcel会自动创建第一个sheet被设置SheetIndex=0
		$objExcel->setActiveSheetIndex ( 0 );
		$objActSheet = $objExcel->getActiveSheet ();
		// 设置当前活动sheet的名称
		$day = date ( 'Y-m-d' );
		$objActSheet->setTitle ( $title .'_'. $day );
		// 设置单元格样式
		// 设置宽度
		// $objActSheet->getColumnDimension('B')->setAutoSize(true);
		foreach($arr_column as $key=>$value){
			$objActSheet->getColumnDimension ( $key )->setWidth ( $value );
		}
		if(!empty($arr_row)){	
			foreach($arr_row as $key=>$value){
				$objActSheet->getRowDimension ( $key )->setRowHeight ( $value );
			}
		}
		$arr_cellvalue = array();
		$c_i = 0;
		foreach ($arr_column as $key => $value) {
			$arr_cellvalue[$key.'2']=$arr_title[$c_i];
			$c_i += 1;
		}
		foreach ($arr_cellvalue as $key=>$value){
			$objActSheet->setCellValue ( $key, $value );
		}
		
		$order_count = count ( $arr_data );
		$dl = $arr_data;
		$i = 3;
		$i < $order_count + 3;
		foreach ( $dl as $k => $v ) {
			$objActSheet->getRowDimension ( $i )->setRowHeight ( 30 );
			
			$arr_column_title = array();
			$arr_column_title_i = 0;
			foreach ($arr_column as $key => $value) {
				$arr_column_title[$arr_column_title_i] = $key.$i;
				$arr_column_title_i++;
			}
			$arr_data_value = array();
			$arr_data_value_i = 0;
			foreach ($v as $key => $value) {
				if(!in_array($key,$arr_filter)){
					$arr_data_value[$arr_data_value_i] = $value;
					$arr_data_value_i++;
				}
			}
			foreach ($arr_data_value as $key => $value) {
				$objActSheet->setCellValue ( $arr_column_title[$key], $value);
				//$objActSheet->setCellValueExplicit($arr_column_title[$key],$value,PHPExcel_Cell_DataType::TYPE_STRING);				
			}
			$i ++;
		}
		// 保护单元格
		// $objExcel->getSheet(1)->getProtection()->setSheet(true);
		// $objExcel->getSheet(1)->protectCells('A1:G'.'$i', 'PHPExcel');
		
		// 输出内容
		$outputFileName = $title.'_' . date ( 'Y-m-d' ) . ".xls";
		$outputFileName = iconv ( "UTF-8", "GB2312//TRANSLIT", $outputFileName );
		// 到文件
		// //$objWriter->save($outputFileName);
		// or
		// 到浏览器
		/*header ( "Content-Type: application/force-download" );
		header ( "Content-Type: application/octet-stream" );
		header ( "Content-Type: application/download" );
		header ( 'Content-Disposition:inline;filename="' . $outputFileName . '"' );
		header ( "Content-Transfer-Encoding: binary" );
		header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
		header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
		header ( "Pragma: no-cache" );*/
		//$objWriter->save ( 'php://output' );
		// 设置附件下载目录
 		$path = date ( 'Y-m' ) . '/';
 		$path = './Downloads/' . $path;
 		if(! file_exists( $path)){
 			if(! mkdir ( $path)){
 				echo '创建文件夹失败！';
 				exit;
 			}
 		}
 	
 		// 到文件
 		$pathinfo = $path.$outputFileName;
 		$objWriter->save($pathinfo);
 		return $pathinfo;
	}
    /**
	 *请求接口类型异常
	 *@date 2012-05-06
	 *@time 上午08:10:19
	 */
	private function _err($str="暂无相关信息") {
		if($this->isecho == 1){
			//请求接口类型异常
			$res = array("status"=>0,"msg"=>$str,'data'=>$this->debug,'err_code'=>$this->err_code);
			if($this->isdebug==1){
				echo '<br>输出的数据:<br><textarea rows="15" cols="120">';
			}
			echo $this->myjson($res);
			if($this->isdebug==1){
				echo '</textarea>';
			}
			die();
		}else{
			$res = array("status"=>0,"msg"=>$str,'data'=>$this->debug,'err_code'=>$this->err_code);
			return $this->myjson($res);
		}
		
	}//end _err
	
	/**
	 *请求成功返回
	 *@date 2012-05-06
	 *@time 上午08:10:19
	 */
	private function _suc($arr=array(),$str="操作成功") {
		if($this->isecho == 1){
			//请求接口类型异常
			$res = array("status"=>1,"msg"=>$str,'data'=>$this->debug);
			if(!empty($arr)){
				$res=array_merge($res,$arr);
			}
			if($this->isdebug==1){
				echo '<br>输出的数据:<br><textarea rows="15" cols="120">';
			}
			echo $this->myjson($res);
			if($this->isdebug==1){
				echo '</textarea>';
			}
			die();
		}else{
			$res = array("status"=>1,"msg"=>$str,'data'=>$this->debug);
			if(!empty($arr)){
				$res=array_merge($res,$arr);
			}
			return $this->myjson($res);
		}
		
	}//end _suc
	/**
	 * 对url或其它字符转义
	 * */
	private function myjson($code) {
		$code = json_encode ( $this->urlencodeAry ( $code ) );
		return urldecode ( $code );
		//return $code;
	}
	private function urlencodeAry($data) {
		if (is_array ( $data )) {
			foreach ( $data as $key => $val ) {
				$data [$key] = $this->urlencodeAry ( $val );
			}
			return $data;
		} else {
			return urlencode ( $data );
		}
	}
	
	/**
	 * 操作插入数据表
	 * */
	private function insert(){
		$model = $this->dao;
		$_POST = $this->post;
		if (false === $model->create ()) {
			return false;
		}
		$result = $model->add ();
		if ($result !== false) {
			return $result;
		} else {
			return false;
		}
	}
	/**
	 * 操作更新数据表
	 * */
	private function update(){
		$model = $this->dao;
		if (false === $model->create ($this->post)) {
			return false;
		}
		$result = $model->save ();
		$this->debug = $model->getlastsql();
		if (false !== $result) {
			return $result;
		} else {
			return false;
		}
	}
	/**
	 * 操作删除数据表
	 * */
	private function delete(){
		$model = $this->dao;
		$result = $model->delete ($this->userid);
		if (false !== $result) {
			return $result;
		} else {
			return false;
		}
	}
	/**
	 * 操作查询数据表
	 * @param $id 查询用户ID
	 * @return 如果存在返回用户信息，不存在返回false，参数$id空返回所有用户信息
	 * */
	private function select($id){
		$model = $this->dao;
		if(!empty($id)){
			$result = $model->find ($id);
			return $result;
		}else{
			$result = $model->select ();
			return $result;
		}
	}
	/**
	 * 操作添加用户关联扩展或附属数据表
	 * @param $table_ext 自定义表名
	 * @param $field_value 自定义插入字段和数值
     * @return 如果成功返回相关信息，失败在返回false
	 * */
	private function insert_ext($table_ext,$field_value = array()){
		if(!empty($table_ext)){
			$this->dao = $table_ext;
		}
		$this->post = $field_value;
		$rel = $this->insert();
		return $rel;
	}
	/**
	 * 操作更新用户关联扩展或附属数据表
	 * @param $table_ext 自定义表名
	 * @param $field_value 自定义插入字段和数值
     * @return 如果成功返回相关信息，失败在返回false
	 * */
	private function update_ext($table_ext,$field_value = array(),$id){
		if(!empty($table_ext)){
			$this->dao = $table_ext;
		}
		if(!empty($id)){
			$field_value['id'] = $id;
			$this->post = $field_value;
		}
		$rel = $this->update();
		return $rel;
	}
	/**
	 * 操作删除用户关联扩展或附属数据表
     * @return 如果成功返回相关信息，失败在返回false
	 * */
	private function delete_ext($id){
		if(!empty($id)){
			$this->userid = $id;
		}
		$rel = $this->delete();
	}
	/**
	 * 操作查询用户关联扩展或附属数据表
	 * @param $table_ext 自定义表名
	 * @param $field_value 自定义查询条件
	 * @param $field 自定义数据字段
	 * @param $isall 是否全部查询  是：true 否：false
     * @return 如果存在返回查询信息，不存在返回false
	 * */
	private function select_ext($table_ext,$field_value = array(),$field = "*",$isall = true){
		if(!empty($table_ext)){
			$this->dao = $table_ext;
		}
		$rel = $this->select_all($field_value,$field,$isall);
		return $rel;
	}
	/**
     * 自定义查询条件查询数据
	 * @param array $field_value 自定义查询条件
	 * @param $field 自定义数据字段
	 * @param $isall 是否全部查询  是：true 否：false
     * @return 如果存在返回所有信息，不存在返回false
     */   
    private function select_all($field_value = array(),$field = "*",$isall = true){
        $model = $this->dao;
		$where = "";
		foreach ($field_value as $key => $value) {
			if(empty($where)){
				$where = $key."='".$value."'";
			}else{
				$where .= " AND ".$key."='".$value."'";
			}
		}
		$rel = array();
		if($isall == true){
			$rel = $model->field($field)->where($where)->select();
			//$this->debug = $model->getlastsql();
		}else{
			$rel = $model->field($field)->where($where)->find();
			//$this->debug = $model->getlastsql();
		}
        if(!empty($rel)){//$rel !== false ||
            return $rel;
        }else{
            return false;
        }
    }
	/**
     * 查询用户是否存在
	 * @param $fn 表字段名
	 * @param $val 值
     * @return 如果存在返回一条用户信息，不存在返回false
     */
    private function select_field($fn,$val){
        $model = $this->dao;
        $rel = $model->where($fn."='".$val."'")->find();
        if($rel !== false || !empty($rel)){
            return $rel;
        }else{
            return false;
        }
    }
}